<?php

namespace App\Services\Article;

use App\Services\Article\Article\ArticleLogic;

/**
 * 文章服务层
 * Class ApiArticle
 * @package App\Services\Article
 */
class ApiArticle
{
    /**
     * 添加文章分类
     */
    public function add($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,["department_ids"=>"", "content"=>""]);
        ValidateArticle::checkValidate($data, ['department_ids','content']);

        return (new ArticleLogic())->add($data);
    }

    /**
     * 文章编辑
     */
    public function edit($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>"","classify_id"=>"", "content"=>""]);
        ValidateArticle::checkValidate($data,['id']);
        return (new ArticleLogic())->edit($data);
    }

    /**
     * 某篇文章置顶
     * @param $data
     * @return array
     */
    public function top($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>""]);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->top($data);
    }

    /**
     * 取消某篇文章置顶
     * @param $data
     * @return array
     */
    public function cancelTop($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>" "]);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->cancelTop($data);
    }

    /**
     * 文章推荐
     */
    public function recommended($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>" "]);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->recommended($data);
    }

    /**
     * 文章取消推荐
     * @param $data
     * @return array
     * @throws \App\Exceptions\RequestFailException
     */
    public function cancelRecommended($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>" "]);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->cancelRecommended($data);
    }

    /**
     * 删除某篇文章
     * @param $data
     * @return array
     * @throws \App\Exceptions\RequestFailException
     */
    public function delete($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>" "]);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->delete($data);
    }

    /**
     * 恢复启用某篇文章
     * @param $data
     * @return array
     * @throws \App\Exceptions\RequestFailException
     */
    public function enable($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>" "]);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->enable($data);
    }

    /**
     * 上架重新发布某篇文章
     * @param $data
     * @return array
     * @throws \App\Exceptions\RequestFailException
     */
    public function release($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>" "]);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->release($data);
    }

    /**
     * 下架发布某篇文章
     * @param $data
     * @return array
     * @throws \App\Exceptions\RequestFailException
     */
    public function cancelRelease($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>" "]);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->cancelRelease($data);
    }

    /**
     * 文章阅读权限 仅自己可见
     * @param $data
     * @return array
     * @throws \App\Exceptions\RequestFailException
     */
    public function oneselfVisible($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>" "]);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->oneselfVisible($data);
    }

    /**
     * 阅读权限 所有人可见
     * @return mixed
     */
    public function everyoneVisible($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>" "]);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->everyoneVisible($data);
    }

    /**
     * 阅读权限 指定人可见
     * @return mixed
     */
    public function nominatorVisible($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>" "]);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->nominatorVisible($data);
    }

    /**
     * 阅读权限 指定人不可见
     */
    public function nominatorInvisible($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>" "]);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->nominatorInvisible($data);
    }

    /**
     * 评论权限 允许评论
     * @return mixed
     */
    public function review($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>" "]);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->review($data);
    }

    /**
     * 评论权限 禁止评论
     * @return mixed
     */
    public function banReview($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>" "]);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->banReview($data);
    }

    /**
     * 转载权限 允许转载
     */
    public function reprinted($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>" "]);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->reprinted($data);
    }

    /**
     * 转载权限 禁止转载
     * @return mixed
     */
    public function banReprinted($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>" "]);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->banReprinted($data);
    }

    /**
     * 审核通过
     * @return mixed
     */
    public function audit($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>'','audit_id'=>'']);
        ValidateArticle::checkValidate($data,['id','audit_id']);

        return (new ArticleLogic())->audit($data);
    }

    /**
     * 审核失败
     * @return mixed
     */
    public function auditFailure($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>'','audit_id'=>'']);
        ValidateArticle::checkValidate($data,['id','audit_id']);

        return (new ArticleLogic())->auditFailure($data);
    }

    /**
     * 文章可见人指定
     * @return mixed
     */
    public function visible($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>'','visible'=>'']);
        if (count($data['visible']) > 10) {
            return auto_failure($data,"指定可见人人数不能超过10人！");
        }
        ValidateArticle::checkValidate($data,['id','visible']);


        return (new ArticleLogic())->visible($data);
    }

    /**
     * 指定文章不可见人
     * @return mixed
     */
    public function invisible($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>'','invisible'=>'']);
        if (count($data['invisible']) > 10) {
            return auto_failure($data,"指定不可见人人数不能超过10人！");
        }
        ValidateArticle::checkValidate($data,['id','invisible']);

        return (new ArticleLogic())->invisible($data);
    }

    /**
     * 点赞次数 +1
     * @return mixed
     */
    public function praise($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>' ']);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->praise($data);
    }

    /**
     * 踩 次数 +1
     * @return mixed
     */
    public function trample($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>' ']);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->trample($data);
    }

    /**
     * 获取文章列表
     * @return mixed
     */
    public function articleList($data)
    {
        $data = init_array($data,['classify_id'=>'',"page"=>1,"listRows"=>15]);
        return (new ArticleLogic())->articleList($data);
    }

    /**
     * 获取某一类置顶状态文章列表 非删除
     * @return mixed
     */
    public function topList($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['classify_id'=>'',"page"=>1,"listRows"=>15]);
        ValidateArticle::checkValidate($data,['classify_id']);

        return (new ArticleLogic())->topList($data);
    }

    /**
     * 获取某一类推荐状态文章列表 非删除
     * @return mixed
     */
    public function recommendedList($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['classify_id'=>'',"page"=>1,"listRows"=>15]);
        ValidateArticle::checkValidate($data,['classify_id']);

        return (new ArticleLogic())->recommendedList($data);
    }

    /**
     * 获取某一篇文章信息 非删除
     * @return mixed
     */
    public function articleInfo($data)
    {
        if (empty($data)) {
            return null_data($data,"参数不能为空！");
        }
        $data = init_array($data,['id'=>'']);
        ValidateArticle::checkValidate($data,['id']);

        return (new ArticleLogic())->articleInfo($data);
    }
}